import request from '@/utils/request';
import type { UserLoginParam, UserRegisterParam, LoginUserVO, Result, ForgotPasswordParam, UserPageParam, UserVO, PageResult } from './types';

/**
 * 用户相关接口地址枚举
 */
export enum UserApi {
  LOGIN = '/user/login',
  REGISTER = '/user/register',
  FORGOT_PASSWORD = '/user/forgot-password',
  RESET_PASSWORD = '/user/reset-password',
  LIST = '/user/list',
}

/**
 * 用户登录
 * @param param 登录参数
 * @returns 登录结果
 */
export function login(param: UserLoginParam) {
  return request.post<any, { data: Result<LoginUserVO> }>(UserApi.LOGIN, param);
}

/**
 * 用户注册
 * @param param 注册参数
 * @returns 注册结果
 */
export function register(param: UserRegisterParam) {
  return request.post<any, { data: Result<null> }>(UserApi.REGISTER, param);
}

/**
 * 忘记密码
 * @param param 忘记密码参数
 * @returns 忘记密码结果
 */
export function forgotPassword(param: ForgotPasswordParam) {
  return request.post<any, { data: Result<null> }>(UserApi.FORGOT_PASSWORD, param);
}

/**
 * 获取用户列表（分页）
 * @param param 查询参数
 * @returns 用户分页结果
 */
export function getUserListByPage(param: UserPageParam) {
  return request.get<any, { data: Result<PageResult<UserVO>> }>(UserApi.LIST, { params: param });
}

/**
 * 编辑用户信息
 * @param param 编辑参数
 * @returns 操作结果
 */
export function editUser(param) {
  return request.put<any, { data: Result<null> }>('/user/edit', param);
}

/**
 * 删除用户
 * @param username 用户名
 * @returns 操作结果
 */
export function deleteUser(username) {
  return request.delete<any, { data: Result<null> }>(`/user/delete?username=${encodeURIComponent(username)}`);
}

/**
 * 修改用户状态（启用/禁用）
 * @param username 用户名
 * @param status 用户状态（0:禁用, 1:启用）
 * @returns 操作结果
 */
export function changeUserStatus(username, status) {
  return request.put<any, { data: Result<null> }>(`/user/change-status?username=${encodeURIComponent(username)}&status=${status}`);
}

/**
 * 新增用户
 * @param param 新增参数
 * @returns 操作结果
 */
export function addUser(param) {
  return request.post<any, { data: Result<null> }>('/user/add', param);
}

/**
 * 批量删除用户
 * @param ids 用户ID数组
 * @returns 操作结果
 */
export function batchDeleteUsers(ids: number[]) {
  return request.delete<any, { data: Result<null> }>('/user/deleteByIds', { data: { ids } });
}

/**
 * 重置密码
 * @param param 重置密码参数
 * @returns 重置结果
 */
export function resetPassword(param) {
  return request.post<any, { data: Result<null> }>(UserApi.RESET_PASSWORD, param);
}